package com.tddinaction.data.spring.jdbc; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import junit.framework.JUnit4TestAdapter; import org.apache.commons.dbcp.BasicDataSource; import org.dbunit.Assertion; import org.dbunit.dataset.CompositeTable; import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.FilteredTableMetaData; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.ITable; import org.dbunit.dataset.filter.DefaultColumnFilter; import org.junit.Before; import org.junit.Test; import com.tddinaction.data.dbunit.InMemoryDatabaseTestCase; import com.tddinaction.data.person.Person; public class JdbcTemplatePersonDaoIntegrationTest extends InMemoryDatabaseTestCase { private List<Person> expectedList; public static junit.framework.Test suite() { return new JUnit4TestAdapter( JdbcTemplatePersonDaoIntegrationTest.class); } @Override @Before public void setUp() throws Exception { super.setUp(); expectedList = new ArrayList<Person>(); expectedList.add(new Person("Drew", "Smith")); expectedList.add(new Person("Nick", "Marquiss")); expectedList.add(new Person("Jose", "Whitson")); } @Test public void testFindAll() throws Exception { JdbcTemplatePersonDao dao = new JdbcTemplatePersonDao(); dao.setDataSource(new BasicDataSource() { @Override public Connection getConnection() throws SQLException { return getJdbcConnection(); } }); assertEquals(expectedList, dao.findAll()); } @Test public void testSavePerson() throws Exception { JdbcTemplatePersonDao dao = new JdbcTemplatePersonDao(); dao.setDataSource(new BasicDataSource() { @Override public Connection getConnection() throws SQLException { return getJdbcConnection(); } }); Person person = new Person("John", "Doe"); person.setSsn("000-69-0000"); dao.save(person); IDataSet expectedData = getDataSet("afterSavePerson"); String[] tables = new String[] { "employee", "salary" }; IDataSet actualData = getConnection().createDataSet(tables); // exclude start_date columns from this comparison ITable actualTable = getTable(actualData, "employee", "start_date"); ITable expectedTable = getTable(expectedData, "employee", "start_date"); Assertion.assertEquals(expectedTable, actualTable); } private ITable getTable(IDataSet dataset, String table, String... excludedColumns) throws DataSetException { DefaultColumnFilter columnFilter = new DefaultColumnFilter(); for (String column : excludedColumns) { columnFilter.excludeColumn(column); } FilteredTableMetaData md = new FilteredTableMetaData(dataset .getTableMetaData(table), columnFilter); return new CompositeTable(md, dataset.getTable(table)); } }